# 官方例子
from greenlet import greenlet


def test1():
    print(12)
    gr2.switch()
    print(34)


def test2():
    print(56)
    gr1.switch()
    print(78)


gr1 = greenlet(test1)
gr2 = greenlet(test2)
# ① 12 56 34  -> dead
gr1.switch()
print('gr1 is dead?:{}, gr2 is dead?:{}'.format(gr1.dead, gr2.dead))

# ② 56 12 78 -> dead
gr2.switch()
print('gr1 is dead?:{}, gr2 is dead?:{}'.format(gr1.dead, gr2.dead))


# 如果 ① ② 同时写，则输出  12 56 34 78 , 为什么?  协程对应的函数执行完毕，协程才会dead
# 因为  从gr1 切到 gr2后test2还未执行完毕就又切回了gr1，test2此时并未执行完，
# 而是处于挂起状态，挂起节点是 Line:13 需要再次执行 gr2.switch()切回test2执行剩下的代码才可结束。
